package com.example.day3.stream;

import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.IntStream;

/**
 * 生成流 - 不用现有的数据生成Stream对象
 */
public class C06GenerateTest {
    public static void main(String[] args) {
        // 1.IntStream.range(简单生成)
        // range方法是含头不含尾的即,实际生成的数字范围是[1,10)
        IntStream.range(1, 10).forEach(System.out::println);
        // rangeClosed方法是含头含尾的即,实际生成的数字范围是[1,10]
        IntStream.rangeClosed(1, 10).forEach(System.out::println);

        // 2.IntStream.iterate(依赖上一个值生成当前值)  生成 1 3 5 7 9 ... 奇数序列    可以根据上一个元素值来生成当前元素
        // 第一个参数是初始值  第二个参数是生成下一个元素的逻辑 注意要加上limit 限制否则会无限制的生成
        IntStream.iterate(1, x -> x + 2).limit(10).forEach(System.out::println);
        // 第二个方式:传递三个参数
        // 第一个参数是初始值  第二个参数是判断当前元素是否满足结束条件  第三个参数是生成下一个元素的逻辑
        IntStream.iterate(1, x -> x <= 9, x -> x + 2).forEach(System.out::println);

        // 3.IntStream.generate(不依赖上一个值生成当前值)
        // 随机生成0-99之间的数字 是含头不含尾的
        IntStream.generate(() -> ThreadLocalRandom.current().nextInt(100)).limit(5).forEach(System.out::println);

        // 另外一个生成方式
        // 其中第一个参数是生成个数 第二个参数是生成的最小值 第三个参数是生成的最大值 注意：生成的是包含头，不包含尾的 即 [0-99]之间的随机数
        ThreadLocalRandom.current().ints(5, 0, 100).forEach(System.out::println);
    }
}
